package appmodel.play


import java.util.List
import java.util.ArrayList
import unq.model.Juego
import unq.model.Pais
import unq.repository.Repository
import model.AppModel.LugarAppModel

class AppModelPPlay {
	
	@Property List<String> villanos = new ArrayList
    @Property String paisActual 
    @Property AppLugar lugar1
	@Property AppLugar lugar2
	@Property AppLugar lugar3
	@Property List<String> conexiones = new ArrayList
	@Property List<String> destinosFallidos = new ArrayList
	@Property Orden ordenDeArresto
	@Property AppModelPais pais
	@Property Integer idDelJuego
	
	new(){
		
	}
	
	def inicializar(){
	
		var juego = Repository.crearUnJuego

		idDelJuego = Repository.instance.agregarJuego(juego)
	
		pais = new AppModelPais((Repository.instance.obtenerJuego(idDelJuego)).caso.paisActual)
	
	
	villanos = (Repository.instance.obtenerJuego(idDelJuego)).listaVillanos.map[villano| villano.nombre]
	
	paisActual = pais.nombre 
	
	lugar1 = pais.lugar1
	lugar2 = pais.lugar2
	lugar3 = pais.lugar2
	
	conexiones = pais.conexiones
	
	destinosFallidos = ((Repository.instance.obtenerJuego(idDelJuego))).caso.recorridoVillano.map[pais | pais.nombre]
	this
	}
	def villanos(){
		_villanos
	}
	def destinos(Integer id){
	((Repository.instance.obtenerJuego(id))).caso.recorridoVillano.map[pais | pais.nombre]
	}
	
	
	def Orden emitirOrden(String o, Integer IdJuego){
		(Repository.instance.obtenerJuego(IdJuego)).caso.definirOrdenArresto(o)
		 ordenDeArresto = new Orden(o)
		 ordenDeArresto.ID = IdJuego
		 ordenDeArresto
	}
		def Viaje  viajar(Viaje p){
		
		var viaje = new Viaje
		
		
		viaje.idDelJuego = p.getIdDelJuego();
     	
     	var juego = (Repository.instance.obtenerJuego(p.idDelJuego))
     	var pa = (Repository.instance.obtenerJuego(p.idDelJuego)).caso.paisActual.conexiones.filter[c | c.nombre == p.nombre].get(0)
      Repository.instance.obtenerJuego(p.idDelJuego).caso.viajar(pa)
       
       	viaje.nombre = Repository.instance.obtenerJuego(p.idDelJuego).caso.paisActual.nombre
       	if(paisActual == "Argentina"){
       		throw new  Exception("Argentina")
       	}
       	viaje.conexiones = Repository.instance.obtenerJuego(p.idDelJuego).caso.paisActual.conexiones.map[nombre]
		viaje.lugar1 = new AppLugar((Repository.instance.obtenerJuego(p.idDelJuego).caso.paisActual.lugaresDeInteres.get(0)))
		viaje.lugar2 = new AppLugar((Repository.instance.obtenerJuego(p.idDelJuego).caso.paisActual.lugaresDeInteres.get(1)))
		viaje.lugar3 = new AppLugar((Repository.instance.obtenerJuego(p.idDelJuego).caso.paisActual.lugaresDeInteres.get(2)))
       	
       	viaje.destinos =  ((Repository.instance.obtenerJuego(p.idDelJuego))).caso.recorridoVillano.map[pais | pais.nombre]
       	viaje
	}
	private static AppModelPPlay juegoApp 
	

	def static AppModelPPlay getInstance(){
		if(juegoApp == null){
		juegoApp = new AppModelPPlay
		return juegoApp
		
		}
		juegoApp
	}
	def villanos(Integer id){
		 Repository.instance.obtenerJuego(id).listaVillanos.map[villano|villano.nombre]
	}
}


class Orden
{
	@Property String nombre
	@Property Integer ID
	new(String n){
		_nombre = n
	}
	new(){
		
	}
}
